/**
 * 空间相关类型定义
 */

// 空间级别
export interface SpaceLevel {
  level: number // 空间级别: 0-普通版, 1-专业版, 2-旗舰版
  name: string // 空间级别名称
  maxSize: string // 空间图片的最大总大小（后端返回字符串）
  maxCount: string // 空间图片的最大数量（后端返回字符串）
}

// 空间基础信息
export interface Space {
  id: string
  spaceName: string // 空间名称
  spaceLevel: number // 空间级别: 0-普通版, 1-专业版, 2-旗舰版
  spaceType: number // 空间类型: 0-个人空间, 1-团队空间
  maxSize?: number // 空间图片的最大总大小
  maxCount?: number // 空间图片的最大数量
  totalSize?: number // 当前空间的图片总大小
  totalCount?: number // 当前空间的图片数量
  userId: string // 创建用户id
  createTime: string // 创建时间
  editTime: string // 编辑时间
  updateTime: string // 更新时间
  isDelete?: number // 是否删除
}

// 空间VO（用户视图）
export interface SpaceVO {
  id: string
  spaceName: string // 空间名称
  spaceLevel: number // 空间级别: 0-普通版, 1-专业版, 2-旗舰版
  spaceType: number // 空间类型: 0-个人空间, 1-团队空间
  userId: string // 创建用户id
  totalSize: number | string // 已使用空间大小（后端可能返回字符串）
  totalCount: number | string // 已使用图片数量（后端可能返回字符串）
  maxSize: number | string // 最大空间大小（后端可能返回字符串）
  maxCount: number | string // 最大图片数量（后端可能返回字符串）
  createTime: string // 创建时间
  editTime: string // 编辑时间
  updateTime?: string // 更新时间
  user?: any // 创建用户信息
  permissionList?: string[] // 权限列表
}

// 创建空间请求
export interface SpaceAddRequest {
  spaceName: string // 空间名称
  spaceLevel: number // 空间级别: 0-普通版, 1-专业版, 2-旗舰版
  spaceType: number // 空间类型: 0-个人空间, 1-团队空间
}

// 编辑空间请求（用户）
export interface SpaceEditRequest {
  id: string
  spaceName: string // 空间名称
}

// 更新空间请求（管理员）
export interface SpaceUpdateRequest {
  id: string
  spaceName: string // 空间名称
  spaceLevel: number // 空间级别: 0-普通版, 1-专业版, 2-旗舰版
  spaceType: number // 空间类型: 0-个人空间, 1-团队空间
}

// 空间查询请求
export interface SpaceQueryRequest {
  current?: number // 当前页码
  pageSize?: number // 每页数量
  sortField?: string // 要排序的字段
  sortOrder?: string // 排序顺序(默认降序)
  id?: string // 空间id
  spaceName?: string // 空间名称
  spaceLevel?: number // 空间级别
  spaceType?: number // 空间类型
  userId?: string // 用户id
}

// 删除请求
export interface DeleteRequest {
  id: string
}

// 空间级别选项
export const SPACE_LEVEL_OPTIONS = [
  { value: 0, label: '普通版', color: 'default' },
  { value: 1, label: '专业版', color: 'processing' },
  { value: 2, label: '旗舰版', color: 'success' },
] as const

// 空间类型选项
export const SPACE_TYPE_OPTIONS = [
  { value: 0, label: '个人空间', color: 'blue' },
  { value: 1, label: '团队空间', color: 'purple' },
] as const

// 获取空间级别名称
export const getSpaceLevelText = (level: number): string => {
  const option = SPACE_LEVEL_OPTIONS.find((item) => item.value === level)
  return option?.label || '未知'
}

// 获取空间级别颜色
export const getSpaceLevelColor = (level: number): string => {
  const option = SPACE_LEVEL_OPTIONS.find((item) => item.value === level)
  return option?.color || 'default'
}

// 获取空间类型名称
export const getSpaceTypeText = (type: number): string => {
  const option = SPACE_TYPE_OPTIONS.find((item) => item.value === type)
  return option?.label || '未知'
}

// 获取空间类型颜色
export const getSpaceTypeColor = (type: number): string => {
  const option = SPACE_TYPE_OPTIONS.find((item) => item.value === type)
  return option?.color || 'default'
}

// 格式化文件大小
export const formatFileSize = (bytes: number | string | undefined | null): string => {
  const numBytes = typeof bytes === 'string' ? parseFloat(bytes) : bytes
  if (!numBytes || numBytes === 0 || isNaN(numBytes)) return '0 B'
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
  const i = Math.floor(Math.log(numBytes) / Math.log(k))
  return Math.round((numBytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]
}

// 计算使用率
export const calculateUsageRate = (
  used: number | string | undefined | null,
  total: number | string | undefined | null,
): number => {
  const numUsed = typeof used === 'string' ? parseFloat(used) : used
  const numTotal = typeof total === 'string' ? parseFloat(total) : total
  if (!numTotal || numTotal === 0 || isNaN(numTotal)) return 0
  if (!numUsed || numUsed === 0 || isNaN(numUsed)) return 0
  return Math.round((numUsed / numTotal) * 100)
}
